﻿namespace CommonComponents.Cache
{
    /// <summary>
    /// Esta interfaz nos sirve para manejar cualquier tipo de administrador de cache
    /// (ya sea cache manager, un hashtable, o cualquier otro tipo de estructura para acceso rápido
    /// a objetos de lectura)
    /// </summary>
    /// <typeparam name="TKeyType">Es el tipo de las llaves del cache manager</typeparam>
    interface ICacheManager<in TKeyType>
    {
        /// <summary>
        /// Obtiene el valor asociado a la llave brindada
        /// </summary>
        /// <param name="key">LLave del valor</param>
        /// <returns>Valor asociado</returns>
        object Get(TKeyType key);
        /// <summary>
        /// Asocia una llave a un valor y lo mete en el cache manager
        /// </summary>
        /// <param name="key">Llave del valor</param>
        /// <param name="value">Valor asociado</param>
        void Add(TKeyType key, object value);
        /// <summary>
        /// Indica si la llave tiene algún valor asociado
        /// </summary>
        /// <param name="key">LLave del valor</param>
        /// <returns>Verdero si tiene valor asociado, sino falso</returns>
        bool Contains(TKeyType key);
        /// <summary>
        /// Remueve el valor asociado de la llave brindada
        /// </summary>
        /// <param name="key">Llave del valor</param>
        void Remove(TKeyType key);
        /// <summary>
        /// Remueve todos los elementos de la cache
        /// </summary>
        void Flush();

    }
}
